/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
 *
 */

import { DependentModuleInfoV1 } from '@ohos/hvigor-arkts-compose';

/**
 * Declgen工具可执行的task
 * declgen: 生成声明文件，不区分模块类型
 * byteCodeHar：处理字节码har生成声明文件以及编译信息
 */
export type DeclgenBuildTask = 'declgen' | 'byteCodeHar';

export interface DeclgenTasks {
  packageName: string;
  buildTask: DeclgenBuildTask;
}

export interface DeclgenProjectConfig {
  bundleName: string;
  mainModuleName: string;
  projectRootPath: string;
}

export type DeclgenDependentModule = {
  /**
   * 参于生成声明文件的所有源码，包含入口文件；如果是字节码har，需要拿到所有声明文件，需包含入口文件。
   */
  fileList: string[];

  /**
   * ArkTS演进编译缓存路径
   * 示例：build/default/cache/default/default@CompileArkTS/esmodule/debug
   */
  cachePath: string;

  /**
   * 字节码har信息
   * abcPath: 文件级混合有两个abc，只传1.1的
   */
  byteCodeHarInfo: Record<string, { abcPath: string; }>;

  /**
   * 依赖的模块目录
   */
  pkgPath: string;

  /**
   * 依赖的版本号 （1.1模块需要传）
   */
  packageVersion?: string
} & DependentModuleInfoV1

export interface RunDeclgenParam {
  /**
   * Declgen工具执行的任务列表
   */
  tasks: DeclgenTasks[];

  /**
   * tasks里所有模块的依赖信息
   * 一个task对应一个本模块信息以及模块的直接和间接依赖信息
   */
  dependentModuleMap: Map<string, DeclgenDependentModule>;

  projectConfig: DeclgenProjectConfig;
}